FindYourCoffee 專案的需求 :
昨天已經將 APP 的初始定位點是我的位置,今天試著顯示附近的咖啡廳資料。
先想想該如何從當前的經緯度得知目前的所在城市。
爬了一下,發現可以使用 Geocoder  解析地理編碼,真是個酷東西 :
/**
 * 取得當前城市
 */
private fun getCityFromCoordinates(context: Context, latitude: Double, longitude: Double): String? {
    val geocoder = Geocoder(context, Locale.getDefault())
    var area: String? = null
    try {
        val addresses = geocoder.getFromLocation(latitude, longitude, 1);
        if (addresses?.isNotEmpty() == true) {
            // 取得城市名稱
            area = getFirstWord(addresses[0].adminArea)
        }
    }
    catch (e: IOException) {
        e.printStackTrace()
    }
    return area
}
接著將取得的城市名稱切割一下 :
/**
 * 切割城市字串
 * 例: 原先會回傳 "Taipei city",只取得 "Taipei"
 */
private fun getFirstWord(input: String): String {
    val words = input.split("\\s+".toRegex())
    return if (words.isNotEmpty()) words[0] else ""
}
完成任務一 !
將拿到的城市字串丟給 loadCafes() :
// 取得咖啡廳資料
viewModel.loadCafes(city)
完整的 loadCafes() :
fun loadCafes(city: String?) {
    viewModelScope.launch(Dispatchers.Main) {
        try {
            // 發起非同步請求取得咖啡廳資料
            val deferredCoffeeShops = repository.getCoffeeShopsAsync(city)
            // 等待非同步執行結果
            val coffeeShops = deferredCoffeeShops.await()
            // 設定結果
            _cafes.postValue(coffeeShops)
        } 
				catch (e: CoffeeShopsRefreshError) {
            _cafes.postValue(mutableListOf())
        }
    }
}
差不多了!! 試試看
這樣就會在打開 APP 後,移動到當前位置,並顯示附近的咖啡廳資訊拉!
因為背景好花,就改了自定義視窗的背景色

但還有一些架構的地方要調整,明天再來處理吧~~
FindYourCoffee 專案的需求 :